home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "getopt.h"
-
- int getline(char *s,int lim,FILE *fp)
- {
- int c,i;
- i = 0;
- while(--lim > 0 && (c=getc(fp)) != EOF && c != '\n')
- s[i++] = c;
- if(c == '\n')
- s[i++] = c;
- s[i] = '\0';
- return i;
- }
-
- void use(void)
- {
- fprintf(stderr,"Use:\nCompdict -i<inputfile> -o<outputfile> -s<level>\n");
- fprintf(stderr,"level = 0 : all entries\n");
- fprintf(stderr,"level = 1 : no rare entries\n");
- fprintf(stderr,"level = 2 : only top 500\n");
- exit(0);
- }
-
- int main(int argc,char **argv)
- {
- char line[256],outl[256],*otp;
- int i,pri,minpri,c,accept,lineno,bf;
- FILE *fpin,*fpout;
-
- line[0] = outl[0] = 0;
- minpri = -1;
-
- while((c = getopt(argc,argv,"i:o:s:")) != EOF)
- {
- switch(c)
- {
- case 'i':
- strcpy(line,optarg);
- break;
- case 'o':
- strcpy(outl,optarg);
- break;
- case 's':
- minpri = strtol(optarg,NULL,10);
- break;
- case '?':
- use();
- }
- }
- if(!line[0] || !outl[0] || (minpri < 0) || (minpri > 2))
- use();
-
- fpin = fopen(line,"r");
- if(!fpin)
- {
- fprintf(stderr,"file %s not found\n",line);
- exit(1);
- }
- fpout = fopen(outl,"w");
- if(!fpout)
- {
- fprintf(stderr,"could not open output file %s \n",outl);
- exit(1);
- }
-
- accept = 0;
- lineno = 0;
- while(getline(line,256,fpin))
- {
- lineno++;
- otp = outl;
- bf = 0;
- for(i=0;i<23 && line[i] != ' ';i++)
- {
- if(line[i] == '|')
- {fprintf(stderr,"illegal character '|' in line %d %s\n ignoring line\n",lineno,line);
- bf = 1;
- break;
- }
- *otp++ = line[i];
- }
- if(bf)
- continue;
- for(;i<23 && line[i] == ' ';i++);
- if(i!=23)
- {
- fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
- continue;
- }
- *otp++ = '|';
- for(i=23;i<46 && line[i] != ' ';i++)
- *otp++ = line[i];
- for(;i<46 && line[i] == ' ';i++);
- if(i!=46)
- {
- fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
- continue;
- }
- *otp++ = '\0';
- pri = 0;
- for(i=46;i<69 && line[i] != ' ';i++)
- {
- if(line[i] == '*') pri = 2;
- if(line[i] == '%' && pri < 1) pri = 1;
- }
- if(pri >= minpri)
- {
- fprintf(fpout,"%s\n",outl);
- accept++;
- }
- }
- fclose(fpin);
- fclose(fpout);
- printf("Done.\nLines read: %d\nLines transferred to output: %d\n",lineno,accept);
- }
-